"use strict";
const weekNames = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
const generateNext7Days = () => {
  const days = [];
  for (let i = 0; i < 7; i++) {
    const date = new Date();
    date.setDate(date.getDate() + i);
    
    const month = date.getMonth() + 1;
    const day = date.getDate();
    const weekName = weekNames[date.getDay()];
    const dateName = `${month}月${day}日 ${weekName}`;
    
    const year = date.getFullYear();
    const formattedMonth = String(month).padStart(2, '0');
    const formattedDay = String(day).padStart(2, '0');
    const dateValue = `${year}-${formattedMonth}-${formattedDay}`;
    
    days.push({
      dateName: dateName,
      dateValue: dateValue
    });
  }
  
  return days;
}

function formatDate(theDate) {
  const date= parseDateOnly(theDate);
  const month = date.getMonth() + 1;
    const day = date.getDate();
    const weekName = weekNames[date.getDay()];
    const dateName = `${month}月${day}日 ${weekName}`;
  return dateName;
} 

function parseDateOnly(date) {
  if (!date) return NaN;

  let parsedDate;

  // 如果是字符串或数字（时间戳），用 new Date() 解析
  if (typeof date === 'string' || typeof date === 'number') {
    parsedDate = new Date(date);
  }
  // 如果是 Date 对象
  else if (date instanceof Date) {
    parsedDate = date;
  }
  // 其他类型（如 null、undefined、对象等）→ 无效
  else {
    return NaN;
  }

  // 检查是否为有效日期
  if (isNaN(parsedDate.getTime())) {
    console.warn('Invalid date:', date);
    return NaN;
  }

  // 返回仅包含年月日的 Date 对象（时分秒为 0）
  return new Date(parsedDate.getFullYear(), parsedDate.getMonth(), parsedDate.getDate());
}

function compareDateOnly(date1, date2) {
  // 安全解析函数：将任意类型转为 Date 对象（仅保留年月日）
  

  const d1 = parseDateOnly(date1);
  const d2 = parseDateOnly(date2);

  // 如果任一日期无效，返回 NaN 或按业务需求处理
  if (isNaN(d1) || isNaN(d2)) {
    throw new Error('Invalid date provided');
    // 或者返回 0 / null / false，根据你的需求
  }

  return d1.getTime() - d2.getTime();
}


module.exports = {
  generateNext7Days: generateNext7Days,
  compareDateOnly:compareDateOnly,
  formatDate: formatDate
}